﻿Public Class xtf_ABMProduccionProyeccion
    Private dtt_articulo_ As DataTable
    Private dtt_requisito_ As DataTable

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        'Prepara grid y datasource articulo_----------------------------------------------------
        dtt_articulo_ = New DataTable
        dtt_articulo_.Columns.Add("idarticulo", GetType(Integer))
        dtt_articulo_.Columns.Add("Nombre", GetType(String))
        dtt_articulo_.Columns.Add("Descripcion", GetType(String))
        dtt_articulo_.Columns.Add("Rubro", GetType(String))
        dtt_articulo_.Columns.Add("Cantidad", GetType(Decimal))
        dtt_articulo_.Columns.Add("Unidad", GetType(String))
        dtt_articulo_.Columns.Add("objeto", GetType(cls_articulo_))

        gdc_articulo_.DataSource = dtt_articulo_
        gdc_articulo_.ForceInitialize()

        gdv_articulo_.PopulateColumns()
        gdv_articulo_.Columns("objeto").Visible = False
        gdv_articulo_.Columns("idarticulo").Visible = False

        gdv_articulo_.Columns("Nombre").OptionsColumn.AllowEdit = False
        gdv_articulo_.Columns("Descripcion").OptionsColumn.AllowEdit = False
        gdv_articulo_.Columns("Rubro").OptionsColumn.AllowEdit = False
        gdv_articulo_.Columns("Unidad").OptionsColumn.AllowEdit = False

        gdv_articulo_.Columns("Cantidad").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
        CType(gdv_articulo_.Columns("Cantidad").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
        CType(gdv_articulo_.Columns("Cantidad").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.EditMask = "n" & int_cantdecimales
        CType(gdv_articulo_.Columns("Cantidad").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.UseMaskAsDisplayFormat = True
        '-----------------------------------------------------------------------------------------------

        'Prepara grid y datasource articulo_----------------------------------------------------
        dtt_requisito_ = New DataTable
        dtt_requisito_.Columns.Add("Tipo", GetType(String))
        dtt_requisito_.Columns.Add("Nombre", GetType(String))
        dtt_requisito_.Columns.Add("Stock", GetType(Decimal))
        dtt_requisito_.Columns.Add("Cantidad", GetType(Decimal))
        dtt_requisito_.Columns.Add("CantidadSTR", GetType(String))
        dtt_requisito_.Columns.Add("Unidad", GetType(Object))
        dtt_requisito_.Columns.Add("ID", GetType(Integer))
        dtt_requisito_.Columns.Add("PARENTID", GetType(Integer))
        trl_requisitos.DataSource = dtt_requisito_
        trl_requisitos.PopulateColumns()
        trl_requisitos.Columns("Tipo").OptionsColumn.AllowEdit = False
        trl_requisitos.Columns("Unidad").OptionsColumn.AllowEdit = False
        trl_requisitos.Columns("Cantidad").OptionsColumn.AllowEdit = False
        trl_requisitos.Columns("CantidadSTR").OptionsColumn.AllowEdit = False
        trl_requisitos.Columns("Nombre").OptionsColumn.AllowEdit = False
        trl_requisitos.Columns("Cantidad").Visible = False


        trl_requisitos.Columns("Stock").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
        CType(trl_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
        CType(trl_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.EditMask = "n" & int_cantdecimales
        CType(trl_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.UseMaskAsDisplayFormat = True
        '-----------------------------------------------------------------------------------------------

        'Prepara grid y datasource articulo_----------------------------------------------------
        gdc_requisitos.DataSource = dtt_requisito_
        gdv_requisitos.PopulateColumns()
        gdv_requisitos.Columns("Tipo").OptionsColumn.AllowEdit = False
        gdv_requisitos.Columns("Unidad").OptionsColumn.AllowEdit = False
        gdv_requisitos.Columns("Cantidad").OptionsColumn.AllowEdit = False
        gdv_requisitos.Columns("CantidadSTR").OptionsColumn.AllowEdit = False
        gdv_requisitos.Columns("Nombre").OptionsColumn.AllowEdit = False
        gdv_requisitos.Columns("Cantidad").Visible = False
        gdv_requisitos.Columns("ID").Visible = False
        gdv_requisitos.Columns("PARENTID").Visible = False


        gdv_requisitos.Columns("Stock").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemTextEdit
        CType(gdv_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
        CType(gdv_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.EditMask = "n" & int_cantdecimales
        CType(gdv_requisitos.Columns("Stock").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemTextEdit).Mask.UseMaskAsDisplayFormat = True
        '-----------------------------------------------------------------------------------------------

        txt_cantidad.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
        txt_cantidad.Properties.Mask.EditMask = "n" & int_cantdecimales
        txt_cantidad.Properties.Mask.UseMaskAsDisplayFormat = True

    End Sub

    Private Sub txt_articulo_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_articulo.ButtonClick
        Dim buscar As xtf_buscardor = Nothing
        Dim Objeto_ As New cls_articulo_
        Objeto_.CargarTodos()

        buscar = New xtf_buscardor("Articulos", Objeto_, {"codigo|Codigo", "nombre|Nombre", "descripcion|Descripcion"})

        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim articulo As cls_articulo_ = buscar.obj_resultado
            txt_articulo.Tag = articulo
            txt_articulo.Text = articulo.ToString
            txt_unidad.Text = articulo.unidaddetalle.ToString
        End If
    End Sub

    Private Sub btn_agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar.Click
        If Not IsNothing(txt_articulo.Tag) Then
            Dim row As DataRow = dtt_articulo_.NewRow
            Dim articulo As cls_articulo_ = txt_articulo.Tag
            row("idarticulo") = articulo.idarticulo
            row("Nombre") = articulo.nombre
            row("Descripcion") = articulo.descripcion
            row("Rubro") = articulo.articulorubro.ToString
            row("Cantidad") = txt_cantidad.Text
            row("Unidad") = txt_unidad.Text
            row("objeto") = articulo
            gdc_articulo_.Visible = False
            CrearRows2(articulo, Nothing, dtt_requisito_, 0)

            dtt_articulo_.Rows.Add(row)
            txt_articulo.Text = ""
            txt_articulo.Tag = Nothing
            txt_cantidad.Text = 0
            txt_unidad.Text = ""
            'TreeList1.DataSource = dtt_requisito_
            trl_requisitos.KeyFieldName = "ID"
            trl_requisitos.ParentFieldName = "PARENTID"
            'TreeList1.PopulateColumns()
        End If
    End Sub

    Private Sub btn_quitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_quitar.Click
        If gdv_articulo_.SelectedRowsCount > 0 Then
            dtt_articulo_.Rows.RemoveAt(gdv_articulo_.GetSelectedRows(0))
        End If
    End Sub


    Private Sub CrearRows2(ByRef prm_articulo As cls_articulo_, ByRef prm_dtr As DataRow, ByRef prm_dtt As DataTable, ByRef prm_nivel As Integer, Optional ByVal prm_articulocomposicionarticulo As cls_articulocomposicionarticulo_ = Nothing)
        Dim MiROW As DataRow = prm_dtt.NewRow
        If Not IsNothing(prm_articulo.articulocomposicionarticulo_) Then
            MiROW("Tipo") = "Componente"
            MiROW("Nombre") = prm_articulo.ToString
            MiROW("ID") = prm_dtt.Rows.Count + 1 'prm_articulo.idarticulo
            Try
                If Not IsNothing(prm_dtr) Then
                    MiROW("PARENTID") = prm_dtr("ID")
                    MiROW("Cantidad") = Math.Round(prm_articulo.unidaddetalle.CCantCargar(prm_articulocomposicionarticulo.cantidad) * txt_cantidad.Text, int_cantdecimales)
                    MiROW("CantidadSTR") = MiROW("Cantidad")
                Else
                    MiROW("PARENTID") = 0
                    MiROW("Cantidad") = txt_cantidad.Text
                    MiROW("CantidadSTR") = MiROW("Cantidad")
                End If
            Catch ex As Exception
            End Try
            MiROW("Stock") = 0
            MiROW("Unidad") = prm_articulo.unidaddetalle
            'MiROW("Material") = Math.Round(prm_articulocomposicionarticulo.cantidad * prm_articulocomposicionarticulo.valor, int_cantdecimales)
            'MiROW("Total") = MiROW("Material")
        Else
            MiROW("Tipo") = "Materia Prima"
            MiROW("Nombre") = prm_articulo.ToString
            MiROW("ID") = prm_dtt.Rows.Count + 1
            MiROW("Stock") = 0
            MiROW("Unidad") = prm_articulo.unidaddetalle
            Try
                MiROW("Cantidad") = Math.Round(prm_articulo.unidaddetalle.CCantCargar(prm_articulocomposicionarticulo.cantidad) * txt_cantidad.Text, int_cantdecimales)
                MiROW("CantidadSTR") = MiROW("Cantidad")
                MiROW("PARENTID") = prm_dtr("ID")
            Catch ex As Exception
            End Try

            'MiROW("PARENTID") = prm_dtr("ID")
            'MiROW("Material") = prm_articulo.costo
            'MiROW("Total") = prm_articulo.costo
        End If

        'If IsNothing(prm_articulo.articulocomposicionarticulo_) Then
        '    If IsNothing(prm_articulo.articulocomposicionmaquinariatarea_) Then
        '        If IsNothing(prm_articulo.articulocomposicionproceso_) Then
        '            
        '        End If
        '    End If
        'End If
        prm_dtt.Rows.Add(MiROW)
        If Not IsNothing(prm_articulo.articulocomposicionarticulo_) Then
            If Not IsNothing(prm_articulo.articulocomposicionarticulo_.Items) Then
                For Each comp As cls_articulocomposicionarticulo_ In prm_articulo.articulocomposicionarticulo_.Items
                    CrearRows2(comp.articulo, MiROW, prm_dtt, prm_nivel + 1, comp)
                Next
            End If
        End If
        If Not IsNothing(prm_articulo.articulocomposicionmaquinariatarea_) Then
            If Not IsNothing(prm_articulo.articulocomposicionmaquinariatarea_.Items) Then
                For Each comp As cls_articulocomposicionmaquinariatarea_ In prm_articulo.articulocomposicionmaquinariatarea_.Items
                    CrearRowsMaquinariaTarea(comp, MiROW, prm_dtt, prm_nivel + 1)
                Next
            End If
        End If
        If Not IsNothing(prm_articulo.articulocomposicionproceso_) Then
            If Not IsNothing(prm_articulo.articulocomposicionproceso_.Items) Then
                For Each comp As cls_articulocomposicionproceso_ In prm_articulo.articulocomposicionproceso_.Items
                    CrearRowsProcesos(comp, MiROW, prm_dtt, prm_nivel + 1)
                Next
            End If
        End If
    End Sub

    Private Sub CrearRowsProcesos(ByRef prm_proceso As cls_articulocomposicionproceso_, ByRef prm_dtr As DataRow, ByRef prm_dtt As DataTable, ByRef prm_nivel As Integer)
        Dim MiROW As DataRow = prm_dtt.NewRow
        'MiROW("A" & prm_nivel) = prm_proceso.proceso.ToString
        MiROW("Tipo") = "Proceso"
        MiROW("Nombre") = prm_proceso.proceso.ToString
        MiROW("ID") = prm_dtt.Rows.Count + 1 'prm_proceso.proceso.idproceso + 5000
        MiROW("PARENTID") = prm_dtr("ID")
        'MiROW("Stock") = 0
        If prm_proceso.tiposegunvalor = cls_articulocomposicionproceso_.enu_segunvalor.valorProceso Then
            MiROW("Cantidad") = Math.Round(prm_proceso.cantidad * txt_cantidad.Text, int_cantdecimales)
            MiROW("CantidadSTR") = MiROW("Cantidad")
            MiROW("Unidad") = "Proceso"
        Else
            MiROW("Cantidad") = Math.Round(prm_proceso.cantidad * txt_cantidad.Text, int_cantdecimales)
            MiROW("CantidadSTR") = CantidadMinToString(MiROW("Cantidad"))
            MiROW("Unidad") = "Tiempo"
        End If
        'MiROW("Personal") = Math.Round(prm_proceso.cantidad * prm_proceso.valor, int_cantdecimales)
        'MiROW("Total") = MiROW("Personal")
        prm_dtt.Rows.Add(MiROW)
    End Sub

    Private Sub CrearRowsMaquinariaTarea(ByRef prm_maquinariatarea As cls_articulocomposicionmaquinariatarea_, ByRef prm_dtr As DataRow, ByRef prm_dtt As DataTable, ByRef prm_nivel As Integer)
        Dim MiROW As DataRow = prm_dtt.NewRow
        'MiROW("A" & prm_nivel) = prm_maquinariatarea.maquinariatarea.ToString
        MiROW("Tipo") = "Maquinaria"
        MiROW("Nombre") = prm_maquinariatarea.maquinariatarea.ToString
        MiROW("ID") = prm_dtt.Rows.Count + 1 'prm_maquinariatarea.maquinariatarea.idmaquinariatarea + 5000
        MiROW("PARENTID") = prm_dtr("ID")
        MiROW("Cantidad") = Math.Round(prm_maquinariatarea.cantidad * txt_cantidad.Text, int_cantdecimales)
        MiROW("CantidadSTR") = CantidadMinToString(MiROW("Cantidad"))
        'MiROW("Stock") = 0
        MiROW("Unidad") = "Tiempo"
        'MiROW("Mantenimiento") = Math.Round(prm_maquinariatarea.cantidad * prm_maquinariatarea.valorMantenimiento, int_cantdecimales)
        'MiROW("Total") = Math.Round(MiROW("Maquinaria") + MiROW("Mantenimiento"), int_cantdecimales)
        prm_dtt.Rows.Add(MiROW)
    End Sub

    Private Sub opt_requisitos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles opt_requisitos.SelectedIndexChanged
        Select Case opt_requisitos.SelectedIndex
            Case 0 'Arbol
                lci_Tree.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                lci_Grid.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
                gdv_requisitos.Columns("Tipo").ClearFilter()
            Case 1 'Componentes
                lci_Tree.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
                lci_Grid.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                gdv_requisitos.Columns("Tipo").FilterInfo = New DevExpress.XtraGrid.Columns.ColumnFilterInfo("[Tipo] = 'Componente'")
            Case 2 'Materias PRimas
                lci_Tree.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
                lci_Grid.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                gdv_requisitos.Columns("Tipo").FilterInfo = New DevExpress.XtraGrid.Columns.ColumnFilterInfo("[Tipo] = 'Materia Prima'")
            Case 3 'Procesos
                lci_Tree.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
                lci_Grid.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                gdv_requisitos.Columns("Tipo").FilterInfo = New DevExpress.XtraGrid.Columns.ColumnFilterInfo("[Tipo] = 'Proceso'")
            Case 4 'Maquinaria
                lci_Tree.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
                lci_Grid.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
                gdv_requisitos.Columns("Tipo").FilterInfo = New DevExpress.XtraGrid.Columns.ColumnFilterInfo("[Tipo] = 'Maquinaria'")
        End Select
    End Sub
End Class